<?php
/**
开发工具要求 
    开发工具使用UTF-8作为编码标准
    使用一个TAB作为基本缩进单位
    每行代码控制在80字符以内（推荐值），尽量不超过120字符。
    换行标志为Unix/Linux文本约定的\n
    集成开发环境统一为：
        WampServer with Apache 2.2.22 – Mysql 5.5.24 – PHP 5.3.13
        下载地址http://www.wampserver.com/en/

空行的使用：
    两个函数声明之间。
    函数内的局部变量和函数的第一条语句之间。
    块注释或单行注释之前。
    一个函数内的两个逻辑代码段之间
    
空格的应用规则
    空格一般应用于关键字与左括号“(”之间，不过需要注意的是，函数名称与左括
    号之间不应该用空格分开。
    字符串的链接符号“.”的两边用空格隔开；
    函数的参数列表中的逗号后面插入空格。
    数学算式的操作数与运算符之间应该添加空格（特例是二进制运算与一元运算除
    外）。
    for 语句中的表达式应该用逗号分开，后面添加空格。
    强制类型转换语句中的强制类型的右括号与表达式之间应该用逗号隔开，添加空
    格。
    除字符串中特意需要，一般情况下，在程序以及 HTML 中不出现两个连续的空格；
    说明或显示部分中，内容如含有中文、数字、英文单词混杂，应当在数字或者英文
    单词的前后加入空格

关于单双引号的使用原则
    在能使用单引号替代双引号的地方均使用单引号
    所有数据在插入数据库之前，均需要进行 addslashes()处理

文件名
    所有包含 PHP 代码的程序文件或半程序文件，应以小写.php 作为扩展名
    文件名称一定要有意义。

类名
    类名应有描述性，杜绝一切拼音、或拼音英文混杂的命名方式
    类名包括字母字符，不允许使用数字和其他字符
    如果类名包括多个单词，应使用驼峰式命名方式，每个单词的第一个字母必须大写，
    不允许连续大写

函数和方法名
    函数名应具有描述性，杜绝一切拼音、或拼音英文混杂的命名方式
    函数名包括字母字符，不允许使用数字和其他字符。
    函数名首字母小写，当包含多个单词时，后面的每个单词的首字母大写. 
    函数名应带有‘get’，‘set’等动作性描述

变量名
    变量也应具有描述性，杜绝一切拼音、或拼音英文混杂的命名方式
    变量包含数字、字母和下划线字符，不允许使用其他字符，变量命名最好使用项目
    中有据可查的英文缩写方式，  尽可以要使用一目了然容易理解的形式；
    变量以字母开头，如果变量包含多个单词，首字母小写，当包含多个单词时，后面
    的每个单词的首字母大写. 
    变量除了在循环体(for， foreach， while)中，其他位置允许但不鼓励使用没有描述意
    义的字母作为变量名。例如：$i,$j

常量名
    常量名应具有描述性，杜绝一切拼音、或拼音英文混杂的命名方式
    常量名包含字母字符和下划线，不允许使用数字和其他字符。
    常量名所有字母必须大写，少数特别必要的情况下，可使用划线来分隔单词。
    PHP  的内建值 TRUE、FALSE  和 NULL 必须全部采用大写字母书写

PHP规范
    PHP开始标记和结束标记
<?php
?>
    只有php代码文件的不写结束标记
<?php

变量的声明
    任何变量在使用之前都需要声明，并定义类型
    $number = 0;       //数值型初始化
    $string = '';      //字符串初始化
    $array  = array(); //数组初始化


建议添加注释的地方：
    在每个文件首部添加注释说明；
    每个函数或每个方法上方添加注释说明；
    对各变量的功能、范围、缺省条件等加上注释；
    对使用的逻辑算法加上注释；

 */

# 示例：文件头注释
/**
 * 文件头注释，注释的第一行为描述，描述的下面要空一行
 *
 * PHP version 5.3   这里是PHP版本，下面空一行
 *
 * @author    Your Name <your_email@this.com>
 * @author    第二个名字（如果有的话） <邮箱地址>
 */

# 示例：单行注释
//单行注释（在必要时），描述下面语句实现的功能
include 'path/to/file.php';
 

# 示例：等号号两边至少要有一个空格
$hello = 'world';

# 示例：多行有等号的尽量保持等号竖向对齐(可选)
$var1         = 'test';
$theSecondVar = 'helloworld';
$thirdVar     = 4577;

# 示例：多个数组元素使用多行形式，不要写在一行，每元素行缩进到array行下面，与array第一个r对齐
$example = array(
            'a'       => 'nothing',
            'name'    => 'format',
            'example' => 'test',
            'multi'   => array(
                          0 => 'a',  
                          1 => 'b',  
                          2 => 'c',  
                          3 => 'd',  
                         ),
           );
# ’=>‘尽量对齐 (可选)
# 最后一个元素结尾也要加上','号
# 最后的尾括号需要对齐array的字母a


 # 函数
 #  说明：
 #      1、函数（类的方法）后面需要一个空行
 #      2、@param 多个不用空行，参数类型，名称，描述要对齐
 #      3、@return 之前要有一个空行
 #      4、函数体里的return 前面要有一个空行
 #      6、参数 ‘,’号后面都要有一个空格
 #      7、注释的时候，参数的类型，名称，描述不能少
 
 /**
  * 这是一个测试函数，作用是xxxxx...
  * 
  * @param  int     $param1     参数描述
  * @param  array   $param2     参数描述
  * @param  string  $param3     参数描述，默认是xxxx...
  * 
  * @return boolean 返回true成功，反之
  */
function testFunction($param1, $param2, $param3 = 'defaultValue') { 
     # code
     # ...
     
     return true; # 上面要有一个空行
} //end testFunction()

#函数结尾要有一个空行
# 如果{}里面的内容比较多 ，结尾需要以注释方式写  end functionName()


# 示例：调用函数
# 参数之间的逗号后面加1个空格
$outputInfo = testFunction($p1, $p1);

# 示例：if ... else结构
#  说明：
#   1、if里的两个括号两边都要有一个空格，else两边也同理
#   2、if只有一句也要用括号括起来

if ($a > $b) {
    # code...
} else {
    #code 
} // end if
# 如果{}里面的内容比较多 ，结尾需要以注释方式写  end if




# foreach 示例,括号两边空格
foreach ($variable as $key => $value) {
    # code...
}//end foreach
# 如果{}里面的内容比较多 ，结尾需要以注释方式写  end foreach

# 示例：while 和 do...while 注意看括号和空格
while ($i <= 10) {
    # code...
}

do {
    # code...
} while ($i <= 10);

# 示例：switch格式
switch ($variable) {
    case 'value':
        # code...
        break;
    case 'value':
        # code...
        break;

    default:
        # code...
        break;
}

# 示例：class 
/**
 * 描述这个class
 **/
class TestClass {   

    /**
     * 构造方法，主要完成xxx的初始化操作
     *
     * @param mixed $someParam 参数描述
     *
     * @return void
     **/
    public function __construct($someParam) {
        # code...
    }

    /**
     * 私有方法示例
     *
     * @return bool 成功或者失败
     */
    private function privateFunction() { 
        # code ...
        
        return TRUE;
    }

} // end class TestClass
# 如果{}里面的内容比较多 ，结尾需要以注释方式写  end class ClassName
